ADO.NET gebruiken om een DAL te maken
De Data Access Layer zijn de klassen die instaan voor de verbinding tussen de applicatie en de data store. Deze klassen maken een verbinding met de database en manipuleren de gegevens uit de database zodat ze door de applicatie gebruikt kunnen worden. De gegevens in een SQL database zijn opgeslagen in tabellen. C# bijvoorbeeld kent dat gegevenstype niet en kan dus niet rechtstreeks werken met SQL tabellen. De DAL zet die tabellen om in gegevenstructuren die C# wel kan manipuleren. Een rij wordt omgezet in een datadictionay of een object, tabellen in een array van datadictionaries of in generieke lijsten. Omgekeerd zet de DAL C# gegevenstructuren om in SQL gegevenstructuren met behulp van SQL statements. Deze ORM (object-relational mapping) zonderen we af in een speciefieke en aparte set van klassen die door de andere onderdelen van de app gebruikt kan worden, bijvoorbeeld het Model, de Business Logic klassen enz. In het Entity Framework zit de DAL in de DbContext klasse.
Probleem
Er dient in onze applicatie aldus een klasse voorzien te worden die het informatieverkeer van en naar de databank behandelt. De DAL klasse implementeert de IDal interface. Dat maakt het gemakkelijker onze applicatie te testen.
Design
Velden
Naam | Bereik | Type | Opmerking |
message | protected | string | |
rowCount | protected | int | |
connectionString | protected | string |
Methoden
Naam | Bereik | Parameters | Retourneert | Opmerking |
create | public | - | Int | Een nieuw product wordt in de database geïnserted. Retourneert 1 bij succes en -1 bij falen. |
update | public | - | Boolean | Een bestaand product wordt in de database aangepast. Retourneert true bij succes en false bij falen. |
delete | public | - | Boolean | Een bestaand product wordt uit de database verwijderd. Retourneert true bij succes en false bij falen. |
readOne | public | - | Boolean | Het product wordt rechtstreeks in het model geplaatst en de methode geeft true of false terug naargelang het selecteren is gelukt of niet |
readAll | public | - | Collection | Retourneert een collectie met alle producten of een lege bij falen. |
readById | public | - | Collection | Retourneert een collectie met geselecteerd product of een lege bij falen. |
readByName | public | - | Collection | Retourneert een collectie met geselecteerde producten of een lege bij falen. |
readLikeName | public | - | Collection | Retourneert een collectie met geselecteerde producten of een lege bij falen. |
readLikeXName | public | - | Collection | Retourneert een collectie met geselecteerde producten of een lege bij falen. |
Oplossing
Interfaces
De DAL klassen hebben meestal een vaste structuur. De klasse bevat methoden om de gegevens in een tabel te inserten, updaten, deleten en te selecteren, één, alle of rijen die beantwoorden aan een bepaald zoekcriteria.
Je kan je kennis over interfaces opfrissen op C# - Interfaces of in het lesmateriaal Programmeren 2.
Dal klassen voor entiteiten
- Er is nogal wat discussie over het al dan niet gebruiken van SQL stored procedures in een DAL klasse. Je kan immers op drie manieren SQL statements vanuit C# laten uitvoeren. In Stored procedures of niet vind je voor alle drie de methoden een voorbeeld. Ik verkies het gebruik van stored procedures omdat je op die manier het SQL gebeuren maximaal loskoppelt van het C# gebeuren. Op die manier kan ik de SQL statements onafhankelijk van C# in SQL maken en uittesten. Het debuggen van de app in C# wordt veel gemakkelijker en overzichterlijker omdat het debuggen zich dan beperkt tot fouten in de C# code en niet in de SQL statements.
- Een DAL klasse maken voor een entiteit (voor de entiteit
EventCategory
) - Later maken we een generieke DAL klasse, maar daarvoor moeten we leren werken met Reflection in C#: Reflection met de Type.GetProperties methode.
2017-09-16 12:50:02